type PercentageParser<
  A extends string,
  U extends any[] = ["", "", ""]
> = A extends `${infer F}${infer Rest}`
  ? F extends "+" | "-"
    ? PercentageParser<Rest, [F, U[1], U[2]]>
    : F extends "%"
    ? PercentageParser<Rest, [U[0], U[1], "%"]>
    : F extends string
    ? PercentageParser<Rest, [U[0], `${U[1]}${F}`, U[2]]>
    : never
  : U;

type Op11 = PercentageParser<"+100">;
